package Logica.PowerUps;

import General.Constantes;
import Graficas.InterfaceGrafica;
import Graficas.SpriteMovements;
import Graficas.SpriteMovementsPrioridad;
import Logica.Proyectil;
import Logica.Celdas.Celda;

/**
 * Esta clase especializa un powerup el cual permite que mario bros realice un disparo.
 * @author Mariano Rodecker
 * @author Matias Varela
 *
 */
public class FlorFuego extends PowerUp {
	private Proyectil p;
	private SpriteMovements aniProyectil;

	/**
	 * Constructor para una flor de Fuego
	 * 
	 * @param sizeX
	 * @param sizeY
	 * @param sm - SpriteMovements para el powerup 
	 * @param aniProyectil - SpriteMovements para el proyectil
	 * @param ig - Interface grafica asociada.
	 */
	public FlorFuego(int sizeX, int sizeY, SpriteMovements sm, SpriteMovements aniProyectil, InterfaceGrafica ig) {
		super.iniObjeto(sizeX, sizeY, sm, ig);
		this.aniProyectil = aniProyectil;

	}

	public void crearProyectil() {
		p = new Proyectil(Constantes.sizeProyectilX, Constantes.sizeProyectilY, aniProyectil, ig);
		p.setInteligencia(intel);
	}

	public PowerUp clone() {
		FlorFuego pw = new FlorFuego(this.sizeX, this.sizeY, this.sm.clone(), this.aniProyectil.clone(), this.ig);
		pw.setX(this.getX());
		pw.setY(this.getY());
		pw.setDirActual(this.getDirActual());
		pw.setInteligencia(this.intel);
		pw.crearProyectil();
		pw.setDirActual(Constantes.dir_nada_right);
		return pw;
	}

	@Override
	public void hacerAccion() {
		hacerMarioGrande((SpriteMovementsPrioridad)mario.getAniMarioGrandeFlor());
	}

	@Override
	public void disparar() {
		if (intel.getControlColisiones().getMapaVisible().getProyectiles().size() < 2) {
			p.setX(mario.getX());
			p.setY(mario.getY());
			switch (mario.getDirActual()) {
				case Constantes.dir_left:
					p.setDirActual(Constantes.dir_left);
					break;
				case Constantes.dir_nada_left:
					p.setDirActual(Constantes.dir_left);
					break;
				case Constantes.dir_right:
					p.setDirActual(Constantes.dir_right);
					break;
				case Constantes.dir_nada_right:
					p.setDirActual(Constantes.dir_right);
					break;
			}
			intel.getControlColisiones().getMapaVisible().getProyectiles().add(p.clone());
		}
	}


	@Override
	public void hacerInvulnerable() {
		// TODO Auto-generated method stub

	}

	@Override
	public void aumentarVidas() {
		// TODO Auto-generated method stub

	}

	@Override
	public void matarEnemigosVisibles() {
		// TODO Auto-generated method stub

	}

	@Override
	public void morirMario() {
		if (!mario.isInvulnerable()) {
			hacerMarioChico(mario.getAniMarioChico());
			mario.hacerInvulnerable(1000,false);
			quitarCaracteristica();
		}
	}

	@Override
	public void golpear(Celda c) {
		// TODO Auto-generated method stub
		c.romper();
		super.golpear(c);
		
	}

	@Override
	public void aumentarPuntos() {
		mario.aumentarPuntos(intel.getPuntuacion().puntosPorFlor());
	}
	


}
